Lustre Programming Language
   HOME

TheInfoList



OR:

Lustre is a formally defined, declarative, and
synchronous Synchronization is the coordination of events to operate a system in unison. For example, the conductor of an orchestra keeps the orchestra synchronized or ''in time''. Systems that operate with all parts in synchrony are said to be synchronou ...
dataflow programming In computer programming, dataflow programming is a programming paradigm that models a program as a directed graph of the data flowing between operations, thus implementing dataflow principles and architecture. Dataflow programming languages share s ...
language for programming reactive systems. It began as a research project in the early 1980s. A formal presentation of the language can be found in the 1991 Proceedings of the IEEE. In 1993 it progressed to practical, industrial use in a commercial product as the core language of the industrial environment SCADE, developed by Esterel Technologies. It is now used for critical control software in
aircraft An aircraft is a vehicle that is able to fly by gaining support from the air. It counters the force of gravity by using either static lift or by using the dynamic lift of an airfoil, or in a few cases the downward thrust from jet engine ...
,
helicopters A helicopter is a type of rotorcraft in which lift and thrust are supplied by horizontally spinning rotors. This allows the helicopter to take off and land vertically, to hover, and to fly forward, backward and laterally. These attributes ...
, and nuclear power plants.


Structure of Lustre programs

A Lustre program is a series of ''node'' definitions, written as: node foo(a : bool) returns (b : bool); let b = not a; tel Where foo is the name of the node, a is the name of the single input of this node and b is the name of the single output. In this example the node foo returns the negation of its input a, which is the expected result.


Inner variables

Additional internal variables can be declared as follows: node Nand(X,Y: bool) returns (Z: bool); var U: bool; let U = X and Y; Z = not U; tel Note: The equations order doesn't matter, the order of lines U = X and Y; and Z = not U; doesn't change the result.


Special operators


Examples


Edge detection

node Edge (X : bool) returns (E : bool); let E = false -> X and not pre X; tel


See also

*
Esterel Esterel is a synchronous programming language for the development of complex reactive systems. The imperative programming style of Esterel allows the simple expression of parallelism and preemption. As a consequence, it is well suited for cont ...
*
SIGNAL In signal processing, a signal is a function that conveys information about a phenomenon. Any quantity that can vary over space or time can be used as a signal to share messages between observers. The '' IEEE Transactions on Signal Processing' ...
(another dataflow-oriented synchronous language) *
Synchronous programming language A synchronous programming language is a computer programming language optimized for programming reactive systems. Computer systems can be sorted in three main classes: (1) transformational systems that take some inputs, process them, deliver their ...
*
Dataflow programming In computer programming, dataflow programming is a programming paradigm that models a program as a directed graph of the data flowing between operations, thus implementing dataflow principles and architecture. Dataflow programming languages share s ...


References


External links


Synchrone Lab
{{Webarchive, url=https://web.archive.org/web/20201125185226/http://www-verimag.imag.fr/Synchrone-main.html?lang=en , date=2020-11-25 Official website

product page Declarative programming languages Synchronous programming languages Hardware description languages Formal methods Software modeling language